The SCSI standard describes a well-defined peripheral bus that is independent of computer system buses such as ISA buses, EISA buses, VESA Local Buses, and PCI buses. The SCSI bus is a shared, contention-based resource. Unlike computer system buses, a SCSI bus contains no clock signal, allowing data transfers to accommodate different speed devices with no impact on devices with faster transfer rates. SCSI decouples peripheral device design from system bus design, allowing users to take advantage of system bus advancement while preserving their investment in peripheral devices.
The SCSI definition allows up to eight SCSI device bus connections or up to 16 connections for the Wide SCSI variation. A SCSI device connects to a SCSI bus via the device's controller and may be either a peripheral device or a host computer. Thus, up to eight devices can connect to a narrow SCSI bus. More typically, one or more host computers connect to one or more peripheral devices through a SCSI bus. This arrangement allows users to upgrade presently-connected devices or add new devices to the bus without changing the devices already connected to the bus.
SCSI devices are either initiators or targets, or both. Initiators are devices such as a host computer that initiate and deliver requests for tasks for fulfillment. If a device can be both an initiator and target, it may only behave on the bus as one at any instant. Targets are devices such as a disk drive or tape drive that perform requested tasks.
SCSI devices communicate with one another using a well-defined protocol involving sequential states called phases. SCSI buses can only be in one phase at a time and buses enter most phases only after exiting previous specific states. Initiators communicate with targets through bus requests called commands. Thereafter, the targets control request resolution. After receiving a command, but before fulfilling it, a target may disconnect from the bus. This allows initiators to perform other work (such as issuing commands to other targets) as the target performs internal processing.
The SCSI architecture allows two, and only two, devices to communicate with each other over its bus simultaneously. A single device cannot broadcast to two or more devices simultaneously, and no conference calls are permitted. Each SCSI device has a unique bus ID which users set using switches, jumpers, or set-up routines. SCSI IDs range from seven (highest priority device ID) to zero (lowest priority device ID) for regular SCSI and up to 15 for the Wide SCSI variation. With wide SCSI the priority is from seven (highest priority device ID) to zero followed by 15 to eight (lowest priority device ID). Hosts typically have the highest SCSI bus ID, allowing them to initiate requests with minimum peripheral device interference.
To obtain bus control, devices must wait for the bus to achieve a bus free phase which indicates that the bus is idle. Devices then arbitrate for bus control. To begin the arbitration phase, each interested device detects a bus free phase. It then places its bus ID on the bus by asserting its associated data bus signal (i.e., device seven asserts a signal on data line seven while device two asserts a signal on data line two). After a brief delay, the device with the highest bus ID value signals its victory and directs lower-priority devices to the back off the bus. The winning device then proceeds through a number of additional phases to complete its task. The losing device must wait for the bus to achieve another bus free phase, at which time it again asserts its associated data bus signal in an attempt to gain control of the SCSI bus.
The specifics of the SCSI standard are explained in a number of works such as the standard itself (ANSI X3.131-1994 and later versions) and Understanding I/O Subsystems, by D. Schwanderer and A. Wilson Jr., which are hereby incorporated by reference. Further background information on SCSI is given in U.S. Pat. No. 5,613,076, which is also hereby incorporated by reference.
While simple to implement, the fixed priority arbitration scheme of SCSI has a significant drawback. Higher-priority devices always get access first, possibly preventing lower-priority devices from gaining sufficient access to the SCSI bus to perform properly. The potential for this adverse effect on lower-priority devices, known as "access starvation," "initiator starvation," or "target starvation," has become much greater recently because newer devices move more data onto the SCSI bus faster. Consequently, higher-priority devices tend to monopolize the SCSI bus by consuming most, if not all, of the SCSI bus bandwidth. The bus bandwidth is defined as the number of bytes per second the bus can transfer. SCSI bandwidths range from a low of 3 megabytes (Mbytes) per second for SCSI-1 buses to 20 to 40 Mbytes per second for Ultra SCSI buses.
An objective of the invention, therefore, is to provide an efficient method for assuring bus access to all devices connected to a bus having a fixed priority arbitration scheme. Another objective of the invention is to assure that lower-priority devices have access to a minimum "fair share" of the bus bandwidth.